/**
 * @(#)CompensacionesDAOFactory.java Feb 21, 2007
 *
 * Copyright (c) 2005-2010 Psiqueware S.A. de C.V. All Rights Reserved.
 * This software is the proprietary information Psiqueware S.A. de C.V.
 * Use is subject to license terms.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *
 * <br/>Usuario : Psique
 * <br/>Creaci&oacute;n: Feb 21, 2007 - 10:53:11 AM
 * <br/>
 * <br/>
 * <br/><t5>Cambios :</t5>
 * <br/><b>Fecha | Autor  |  Cambios</b>
 * <ul>
 * <li>Feb 21, 2007 | <a href = "mailto:AngelElectrico@PsiqueWare.com">Psique</a> | Creaci&oacute;n del Objeto.</li>
 *
 * </ul>
 */

package com.psiqueware.jazmin.empresas.recursos.humanos.compensaciones.dao;

import com.psiqueware.alheli.dao.BaseDAOFactory;
import com.psiqueware.alheli.dao.TipoDAO;
import com.psiqueware.jazmin.empresas.recursos.humanos.compensaciones.dao.fake.EstructuraSalarialDAOFake;
import com.psiqueware.jazmin.empresas.recursos.humanos.compensaciones.dao.fake.GradoRangoSalarialDAOFake;
import com.psiqueware.jazmin.empresas.recursos.humanos.compensaciones.dao.fake.RegistroEmpleadoDAOFake;
import com.psiqueware.jazmin.empresas.recursos.humanos.compensaciones.dao.fake.IncrementoPropuestoDAOFake;
import com.psiqueware.alheli.logging.Logger;
import com.psiqueware.alheli.logging.LoggerFactory;

/**
 * Fabrica de objetos DAO para el modulo de Compensaciones.
 * <br/>Paquete Original: com.psiqueware.laVIE.empresas.empleados.compensaciones.dao
 * <br/>Nombre  Original: CompensacionesDAOFactory
 * <br/><a href="CompensacionesDAOFactory.java.html"><i>Ver C&oacute;digo Fuente</i> </a>
 *
 * @author <a href="mailto:AngelElectrico@PsiqueWare.com">Psique</a>
 * @version Revision: 1.1 Feb 21, 2007 10:53:11 AM
 * @noinspection OverlyCoupledClass
 */
public class CompensacionesDAOFactory extends BaseDAOFactory
{


    /** Logger de clase para CompensacionesDAOFactory */
    private static final Logger s_log = LoggerFactory.getLogger ( CompensacionesDAOFactory.class );


    /** Constructor de DAOFactory. Esta clase no puede instanciarse, es una utiler&iacute;a est&aacute;tica. */
    private CompensacionesDAOFactory ()
    {
    }

    /** Objeto de operaciones CRUD para EstructuraSalarial. */
    private static EstructuraSalarialDAO s_daoEstructuraSalarial;


    /**
     * Devuelve una instancia del dao para EstructuraSalarial.
     *
     * @return EstructuraSalarialDAO para operaciones CRUD.
     */
    public static synchronized EstructuraSalarialDAO findDAOEstructuraSalarial ()
    {
        if ( s_daoEstructuraSalarial == null )
        {
            //todo: Descomentar los m&eacute;todos apropiados.
            if ( m_tipo.equals ( TipoDAO.FAKE ) )
            {
                s_daoEstructuraSalarial = new EstructuraSalarialDAOFake ();
            }
            else if ( m_tipo.equals ( TipoDAO.DUMMY ) )
            {
                //s_daoEstructuraSalarial = new EstructuraSalarialDAODummy ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_CLASICO ) )
            {
                //s_daoEstructuraSalarial = new EstructuraSalarialDAOHbm ();
            }
            else if ( m_tipo.equals ( TipoDAO.ORACLE ) )
            {
                //s_daoEstructuraSalarial = new EstructuraSalarialDAOOracle ();
            }

            if ( s_daoEstructuraSalarial == null )
            {
                String error = "No se encontr&oacute; un dao de EstructuraSalarial correcto para el tipo:" + m_tipo;
                s_log.error ( error );
                throw new IllegalArgumentException ( error );
            }
        }

        return s_daoEstructuraSalarial;
    }

    /** Objeto de operaciones CRUD para GradoRangoSalarial. */
    private static GradoRangoSalarialDAO s_daoGradoRangoSalarial;


    /**
     * Devuelve una instancia del dao para GradoRangoSalarial.
     *
     * @return GradoRangoSalarialDAO para operaciones CRUD.
     */
    public static synchronized GradoRangoSalarialDAO findDAOGradoRangoSalarial ()
    {
        if ( s_daoGradoRangoSalarial == null )
        {
            //todo: Descomentar los m&eacute;todos apropiados.
            if ( m_tipo.equals ( TipoDAO.FAKE ) )
            {
                s_daoGradoRangoSalarial = new GradoRangoSalarialDAOFake ();
            }
            else if ( m_tipo.equals ( TipoDAO.DUMMY ) )
            {
                //s_daoGradoRangoSalarial = new GradoRangoSalarialDAODummy ();
            }
            else if ( m_tipo.equals ( TipoDAO.HIBERNATE_CLASICO ) )
            {
                //s_daoGradoRangoSalarial = new GradoRangoSalarialDAOHbm ();
            }
            else if ( m_tipo.equals ( TipoDAO.ORACLE ) )
            {
                //s_daoGradoRangoSalarial = new GradoRangoSalarialDAOOracle ();
            }

            if ( s_daoGradoRangoSalarial == null )
            {
                String error = "No se encontr&oacute; un dao de GradoRangoSalarial correcto para el tipo:" + m_tipo;
                s_log.error ( error );
                throw new IllegalArgumentException ( error );
            }
        }

        return s_daoGradoRangoSalarial;
    }
        /** Objeto de operaciones CRUD para RegistroEmpleado. */
            private static RegistroEmpleadoDAO s_daoRegistroEmpleado;


            /**
             * Devuelve una instancia del dao para RegistroEmpleado.
             *
             * @return RegistroEmpleadoDAO para operaciones CRUD.
             *
             */
            public static synchronized RegistroEmpleadoDAO findDAORegistroEmpleado ()
            {
                if ( s_daoRegistroEmpleado == null )
                {
                    //todo: Descomentar los m&eacute;todos apropiados.
                    if ( m_tipo.equals ( TipoDAO.FAKE ) )
                    {
                        s_daoRegistroEmpleado = new RegistroEmpleadoDAOFake ();
                    }
                    else if ( m_tipo.equals ( TipoDAO.DUMMY ) )
                    {
                        //s_daoRegistroEmpleado = new RegistroEmpleadoDAODummy ();
                    }
                    else if ( m_tipo.equals ( TipoDAO.HIBERNATE_CLASICO ) )
                    {
                        //s_daoRegistroEmpleado = new RegistroEmpleadoDAOHbm ();
                    }
                    else if ( m_tipo.equals ( TipoDAO.ORACLE ) )
                    {
                        //s_daoRegistroEmpleado = new RegistroEmpleadoDAOOracle ();
                    }

                    if ( s_daoRegistroEmpleado == null )
                    {
                        String error = "No se encontr&oacute; un dao de RegistroEmpleado correcto para el tipo:" + m_tipo;
                        s_log.error ( error );
                        throw new IllegalArgumentException (error);
                    }
                }

                return s_daoRegistroEmpleado;
            }

        /** Objeto de operaciones CRUD para IncrementoPropuesto. */
            private static IncrementoPropuestoDAO s_daoIncrementoPropuesto;


            /**
             * Devuelve una instancia del dao para IncrementoPropuesto.
             *
             * @return IncrementoPropuestoDAO para operaciones CRUD.
             *
             */
            public static synchronized IncrementoPropuestoDAO findDAOIncrementoPropuesto ()
            {
                if ( s_daoIncrementoPropuesto == null )
                {
                    //todo: Descomentar los m&eacute;todos apropiados.
                    if ( m_tipo.equals ( TipoDAO.FAKE ) )
                    {
                       s_daoIncrementoPropuesto = new IncrementoPropuestoDAOFake ();
                    }
                    else if ( m_tipo.equals ( TipoDAO.DUMMY ) )
                    {
                        //s_daoIncrementoPropuesto = new IncrementoPropuestoDAODummy ();
                    }
                    else if ( m_tipo.equals ( TipoDAO.HIBERNATE_CLASICO ) )
                    {
                        //s_daoIncrementoPropuesto = new IncrementoPropuestoDAOHbm ();
                    }
                    else if ( m_tipo.equals ( TipoDAO.ORACLE ) )
                    {
                        //s_daoIncrementoPropuesto = new IncrementoPropuestoDAOOracle ();
                    }

                    if ( s_daoIncrementoPropuesto == null )
                    {
                        String error = "No se encontr&oacute; un dao de IncrementoPropuesto correcto para el tipo:" + m_tipo;
                        s_log.error ( error );
                        throw new IllegalArgumentException (error);
                    }
                }

                return s_daoIncrementoPropuesto;
            }
}